/**
 * 响应拦截
 * @param {Object} http 
 */
module.exports = (vm) => {
	uni.$tn.http.interceptors.response.use((response) => {
		/* 对响应成功做点什么 可使用async await 做异步操作*/
		const data = response.data
		const statusCode = response.statusCode;
		const success = data.success;
		if (!data.hasOwnProperty('success')) {
			return Promise.resolve(data);
		}
		if (success) {
			return Promise.resolve(data);
		} else {
			// 自定义参数
			const errorDetail = data.errorDetail
			const custom = response.config?.custom
			if (custom?.toast ?? true) {
				uni.$tn.toast(errorDetail.message)
			}
			if (errorDetail.code == 401) {
				toLogin(vm);
			}

			// 如果需要catch返回，则进行reject
			if (custom?.catch ?? true) {
				return Promise.reject(data)
			} else {
				// 否则返回一个pending中的promise
				return new Promise(() => {})
			}
		}
	}, (response) => {
		let { data, errMsg } = response;
		console.error(response)
		if (errMsg == 'request:fail') {
			vm.$common.msg('服务器崩溃了...');
			setTimeout(() => {
				toLogin(vm);
			}, 1000);
			return Promise.reject(response);
		}
		if (data.code == 401) {
			vm.$common.msg('登录已经过期,请重新登录');
			setTimeout(() => {
				toLogin(vm);
			}, 1000);
			return Promise.reject(response);
		}
		return Promise.reject(response);
	})
}

function toLogin(vm) {
	vm.$tn.vuex('vuex_login_flag', false);
	vm.$tn.vuex('vuex_token', '');
	vm.$common.toLoginPage();
}